package ip

import (
	"fmt"
	"os/exec"
	"runtime"
	"strings"
)

// ChangeIP 用于根据操作系统更改 IP 地址、子网掩码和网关
// 参数:
//
//	ip: 要设置的 IP 地址
//	netmask: 要设置的子网掩码
//	gateway: 要设置的网关
//
// 返回:
//
//	如果操作成功返回 nil，失败则返回错误
func ChangeIP(ip, netmask, gateway string) error {
	switch os := runtime.GOOS; os {
	case "windows":
		// Windows 下使用 netsh 命令更改 IP
		cmd := exec.Command("netsh", "interface", "ip", "set", "address", "name=\"Ethernet\"",
			"source=static", "addr="+ip, "mask="+netmask, "gateway="+gateway)
		if err := cmd.Run(); err != nil {
			return fmt.Errorf("failed to change IP on Windows: %w", err)
		}
	case "linux":
		// Linux 下使用 ifconfig 和 route 命令更改 IP
		cmd := exec.Command("ifconfig", "eth0", ip, "netmask", netmask)
		if err := cmd.Run(); err != nil {
			return fmt.Errorf("failed to set IP and netmask on Linux: %w", err)
		}
		cmd = exec.Command("route", "add", "default", "gw", gateway, "eth0")
		if err := cmd.Run(); err != nil {
			return fmt.Errorf("failed to set gateway on Linux: %w", err)
		}
	default:
		return fmt.Errorf("unsupported OS: %s", os)
	}
	return nil
}

// SendEmail 用于向指定的邮箱发送电子邮件
// 参数:
//
//	to: 邮件接收者
//	subject: 邮件主题
//	body: 邮件内容
//
// 返回:
//
//	如果发送成功返回 nil，失败则返回错误
func SendEmail(to, subject, body string) error {
	cmd := exec.Command("sendmail", to)
	cmd.Stdin = strings.NewReader(fmt.Sprintf("Subject: %s\n\n%s", subject, body))
	if err := cmd.Run(); err != nil {
		return fmt.Errorf("failed to send email: %w", err)
	}
	return nil
}
